package com.Demo1;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-12-04
 * Time: 15:01
 */

//懒汉模式
public class Singleton1 {
    //volatile禁止指令重排序
    //执行instance = new Singleton1();  创建内存 针对内存初始化 将内存的地址赋值给引用 这三个指令可能会触发指令重排序（乱序执行）
    private volatile static Singleton1 instance = null;

    private Singleton1(){}

    public Singleton1 getInstance(){
        if (instance == null){
            //加完锁之后 并且instance被实例化之后 那么instance一定是不为null的 就会差生大量的所冲突 所以在家一层if判断
            synchronized (Singleton1.class){
                //既包含了 读 又包含了 写  存在线程安全问题 那么就synchronized 加锁
                if (instance == null){
                    instance = new Singleton1();
                }
            }
        }
        return instance;
    }

    //1.双重if判断
    //2.synchronized加锁
    //3 volatile 指令重排序

}
